package com.zhou.cloud.config.kafka;

/**
 * @descrition: 创建配置类
 * @author: zhouyongjun
 * @date: 2022/7/28
 **/

import org.apache.kafka.clients.admin.AdminClientConfig;
import org.apache.kafka.clients.admin.NewTopic;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.core.KafkaAdmin;

import java.util.HashMap;
import java.util.Map;

/**
 * kafka 主题配置类
 *
 * @author 配置主题（KafkaAdmin）
 * @create 2020/12/31 15:57
 **/
@Configuration
public class KafkaTopicConfiguration {

    /**
     * 创建 KafkaAmin，可以自动检测集群中是否存在topic，不存在则创建
     * @return
     */
//    @Bean
//    public KafkaAdmin kafkaAdmin() {
//        Map<String, Object> props = new HashMap<>();
////        props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "127.0.0.1:9092,127.0.0.1:9093,127.0.0.1:9094");
//        props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "127.0.0.1:9092");
//        return new KafkaAdmin(props);
//    }

    /**
    * @Description:
     *  也可以不手动创建topic，在执行代码kafkaTemplate.send("hello-kafka-test-topic", normalMessage)，
     *  发送消息时，kafka会帮我们自动完成topic的创建工作，
     *  但这种情况下创建的topic默认只有一个分区，分区也没有副本。所以，我们可以在项目中新建一个配置类专门用来初始化topic
    * @Params: 
    * @Returns: 
    * @Author: zhouyongjun
    * @Date Created in 2022/7/28 15:49
     */
    @Bean
    public NewTopic newTopic() {
        // 创建 topic，指定 名称、分区数、副本数
        return new NewTopic("hello-kafka-test-topic", 3, (short) 2);
    }



    // 如果要修改分区数，只需修改配置值重启项目即可
    // 修改分区数并不会导致数据的丢失，但是分区数只能增大不能减小
    @Bean
    public NewTopic updateTopic() {
        return new NewTopic("testtopic",10, (short) 2 );
    }


}
